ofsp2026 08_io
Created time
Mar 28, 2026 05:22 AM
type
Post
status
Published
date
Mar 28, 2026
slug
ofsp2026 08_io
summary
tags
ofsp2026
OpenFOAM
category
post
icon
password
Place
Last edited time
Mar 28, 2026 09:13 AM
Important
访问 https://aerosand.cc 以获取最近更新。
0. 前言
通过第一阶段的 8 篇讨论,相信读者已经对 OpenFOAM 的项目架构和编译原理已经有了一定的理解。接下来我们进一步讨论求解器项目必须的一些基础。
Tip
需要重申目前阶段 OpenFOAM 初学者的 C++ 学习的个人建议。
- 需要做的是: 先学习 C++ 面向对象基础,然后不断学习 C++,逐渐深入,在不断的实践中积累 C++ 经验。
- 不需要做: 暂时不需要掌握 C++ 高级特性,暂时不需要学习复杂算法,不能等学完 C++ 再开始 OpenFOAM。
本文主要讨论
了解 OpenFOAM 的信息写入写出
实现 C++ 方式的信息写入写出
编译运行 io 项目
1. 参考 OF 的写入写出
我们知道 C++ 可以通过输入输出流来实现信息的写入写出,下面我们查看一下 OpenFOAM 写入写出的数据格式。
终端输入命令,前往
run 文件夹路径如果终端提示缺少此文件夹
终端输入命令,创建
run 文件夹,并来到此文件夹路径终端输入命令,拷贝原生算例
cavity 到 run 文件夹路径终端输入命令,通过 vscode 打开算例,查看其中的文件
1.1. 写入文件
在 vscode 终端中输入命令,查看算例的文件结构以及初始文件
终端输入如下
文件解释如下
- 文件夹
0/是算例的初始场文件(即时间为 0 的时间步) - 比如包含此算例的压力场 p 和速度场 U
- 均包含相应的内部场和边界条件
- 文件夹
constant/是几何、物理等相关的写入字典 - 这里的“字典”是 OpenFOAM 的写入文件格式,可以简单理解成 OpenFOAM 的写入文件
- 比如包含
transportProperties文件,一般指定流体的粘度、扩散系数等物理参数 - 稍后生成的网格信息文件将保存在此文件夹
- 文件夹
system/是控制计算的写入字典 - 比如包含
blockMeshDict文件,指定稍后网格生成的参数 - 比如包含
controlDict文件,指定时间步长、起止时间等参数 - 比如包含
fvSchemes文件,指定空间时间的离散格式等 - 比如包含
fvSolution文件,指定求解器选择、松弛因子等 - 其他字典文件暂不深究
使用 vscode 查看
transportProperties 字典使用 vscode 查看
controlDict 字典简单来说,原生算例里的所有文件(包括稍后其中生成的网格信息)都是写入文件,其中的信息将传输进入 OpenFOAM 的应用。
1.2. 写出文件
我们快速计算该算例
终端输入命令,划分网格并计算
终端输入命令,查看计算后的文件结构
可以看到计算后,结果以字典中指定的方式
0.005*20=0.1s,每隔 0.1 秒存储一次,直到 0.5 秒停止。保存的内容也由求解器确定,比如 phi 等,暂不深究。另外也能看到网格划分后保存的网格信息 polyMesh 文件夹。我们以
0.5/ 文件夹中的速度场结果为例,查看其数据格式Tip
整个过程即:
- 从外部文件向项目写入信息
- 项目运行(计算)
- 从项目向外部文件写出信息
2. C++ 方式实现写入写出
在初学的时候我们就知道 C++ 提供
iostream 标准库,包含 cin 和 cout 方法,用于从标准输入中读取信息流,或者从标准输出中写入信息流。除此之外,C++ 还提供 fstream 标准库,用于外部文件和信息流之间的交互。ofstream表示输出文件流,用于创建文件并向文件写入信息
ifstream表示输入文件流,用于从文件读取信息
fstream表示通用文件流,同时具有写入写出的方法
我们使用 C++ 的方式去实现写入写出。
2.1. 项目准备
终端输入命令,建立本文项目
通过 vscode 的
C/C++ Project Generater 打开此项目。终端输入命令,测试项目模板
可以看到项目运行结果,说明项目初始模板没有问题。
2.2. 主源码
我们通过该项目模拟求解器读取算例字典文件的参数。
主源码
ofsp_08_io/src/main.cpp 内容如下2.3. 说明文件
因为目前的项目较为简单,读者可以根据自己的需要准备说明文件。不再赘述。
2.4. 编译运行
终端输入命令,检查编译
终端输出命令
可以看到终端输出的信息提醒
warning: unused parameter ‘argc’ ,我们确实没有使用 argc ,所以不用在意。最后提醒 Executing all complete! 表示编译成功,没有问题。我们在该项目的根目录下提供类似 OpenFOAM 字典的文件。
ofspProperties 文件内容如下(路径为 /ofsp/ofsp_08_io/ofspProperties)终端输入命令,运行此项目
或者重新编译并运行
终端输出信息如下
我们可以看到每一项外部文件的关键词后的参数都被读入了程序,意味着这些参数都可以参与到项目的计算中,项目最终将结果写出。
写出的文件
U 同样在项目根目录下,内容如下格式和 OpenFOAM 的输出速度场的格式类似。
3. 小结
通过这个项目,我们可以简单理解, OpenFOAM 求解器是如何通过字典文件拿到参数指定的值。这些参数参与项目计算。之后,项目将计算结果写出到外部文件。写出的文件本质上是符合 OpenFOAM 格式要求,符合后处理软件格式要求,等待进一步分析的数据文件。
本文完成讨论
了解 OpenFOAM 的信息写入写出
实现 C++ 方式的信息写入写出
编译运行 io 项目
支持我们
Tip
希望这里的分享可以对坚持、热爱又勇敢的您有所帮助。
如果这里的分享对您有帮助,您的评论或赞助将对本系列以及后续其他系列的更新、勘误、迭代和完善都有很大的意义,这些行动也会为后来的新同学的学习有很大的助益。
赞助打赏时的信息和留言将用于展示和感谢。

Copyright @ 2026 Aerosand
- 课程(文本、图片等):CC BY-NC-SA 4.0
- OpenFOAM 开发代码 :GPL v3
- 其他代码:MIT License
Loading...